package com.gpframework.module.module.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.IService;
import com.gpframework.common.pay.leshua.res.LeshuaScanCodePayRes;
import com.gpframework.module.brand.domain.BrandStoreUserRela;
import com.gpframework.module.module.domain.BrandStore;
import com.gpframework.module.module.domain.req.BrandStoreReq;
import com.gpframework.module.module.domain.req.BrandStoreUpdate;
import com.gpframework.module.module.domain.vo.BrandStoreVo;
import com.gpframework.module.module.domain.vo.BusinessDataCacheVo;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;

/**
 * @ClassName BrandStore
 * @Author gpframework
 * @Date 2022-03-25
 * @Version 1.0.0
 * @Description 门店Service接口
 */
public interface IBrandStoreService extends IService<BrandStore> {

    /**
     * @Description 查询列表返回VO 用于返回给前端的列表接口
     * @Author gpframework
     * @Date 2022-03-25
     * @Param [lqw]
     * @Return List<BrandStoreVo>
     */
    List<BrandStoreVo> listVo(QueryWrapper<BrandStore> lqw);

    /**
     * @Description 通过查询详情VO 用于返回给前端的列详情接口
     * @Author gpframework
     * @Date 2022-03-25
     * @Param [id]
     * @Return BrandStoreVo
     */
    BrandStoreVo getVoById(Long id);

    /**
     * 添加门店
     *
     * @param brandStoreUpdate
     * @return
     */
    BrandStoreVo add(BrandStoreUpdate brandStoreUpdate);


    /**
     * 小程序门店列表
     *
     * @param brandStoreReq
     * @return
     */
    List<BrandStoreVo> homeListVo(BrandStoreReq brandStoreReq);

    /**
     * 修改门店信息
     *
     * @param brandStoreUpdate
     * @return
     */
    boolean edit(BrandStoreUpdate brandStoreUpdate);

    /**
     * 根据门店id获取门店
     *
     * @param storeId
     * @return
     */
    BrandStoreVo getStoreVoById(Long storeId);


    /**
     * 查询品牌门店列表
     *
     * @param brandStoreReq
     */
    List<BrandStoreVo> findByBrandId(BrandStoreReq brandStoreReq);


    List<BrandStoreVo> findByStoreId(Long storeId);

    /**
     * 查询门店信息
     *
     * @param brandStoreReq
     * @return
     */
    BrandStoreVo get(BrandStoreReq brandStoreReq);

    /**
     * 用户门店列表
     *
     * @param lqw
     * @return
     */
    List<BrandStoreVo> userStoreList(QueryWrapper<BrandStoreUserRela> lqw);

    /**
     * 查询正在使用的门店
     *
     * @return
     */
    List<BrandStoreVo> getStoreList();


    /**
     * 获取门店信息（缓存获取）
     *
     * @param storeId
     * @return
     */
    BrandStoreVo getBrandStore(Long storeId);

    /**
     * 修改门店信息（缓存获取）
     *
     * @param storeId
     * @return
     */
    int updateBrandStoreById(BrandStore brandStore);

    boolean removeByStoreIds(List<Long> storeIds);

    /**
     * 获取品牌门店列表
     *
     * @param brandId
     * @return
     */
    List<BrandStoreVo> getBrandStoreList(Long brandId);


    /**
     * 生成门店二维码
     *
     * @param brandStoreReq
     * @return
     */
    boolean genStoreQrCode(BrandStoreReq brandStoreReq);

    /**
     * 设置业务数据
     *
     * @param businessDataCacheVo
     * @return
     */
    boolean saveBusinessData(BusinessDataCacheVo businessDataCacheVo);

    /**
     * 获取业务数据列表
     *
     * @param businessDataCacheVo
     * @return
     */
    List<BusinessDataCacheVo> getBusinessData(BusinessDataCacheVo businessDataCacheVo);

    /**
     * 删除业务数据缓存
     *
     * @param cacheKey
     * @return
     */
    boolean delBusinessData(String cacheKey);

    /**
     * 修改门店状态与区域地址
     *
     * @param brandStoreUpdate
     * @return
     */
    boolean updateStoreInfo(BrandStoreUpdate brandStoreUpdate);
}
